/**
 * 这是一个表单验证的jquery插件。
 * author:sen
 * ------2011/11/12
 */
document.write("<link type='text/css' rel='stylesheet' href='jslib/yz1.1/yz.css'/>");
jQuery.fn.yz = function(o){
	var cfg = {
		info:"",
		regular:null,
		failClass:"fail",
		infoClass:"info",
		showSpeed:100,
		hideSpeed:0,
		isPW_QR:false,//如果是密码确认框。注：密码确认框的id=密码框id+'2'
		isBlur:true, 
		isRequired:false,
		hasAnyOne:false,//之中至少有一个不为空
		check:null,	//检查值的回调函数（这个函数控制得更自由些）
		test:null	//以函数形式来替代用来检查值的正则表达式（这个函数控制得方便些）
	};
	jQuery.extend(true,cfg, o);
	var yzThis = this;
	//如果是表单则
	if(this.length<1){
		return false;
	}
	if(this[0].nodeName=='FORM') {
		var f = this;
		var hasError = false;
		f.find('input,textarea,password,radio,checkbox,select').each(function(i){
			if(!this.disabled){
				$(this).blur();
				var yzs = $(this).attr('yzStatus');
				if(yzs==0) {
					f.attr('yzSuccess','false');
					hasError = true;
				}
			}
		});
		if(!hasError)f.attr('yzSuccess','true');
		return this;
	}
	var form = this.parents('form');
	var yzStatus = function(test,t) {
		var view = $(t);
		if(t.type==='hidden') {
			view = $('#'+$(t).attr('viewId'));
		}
		if(test) {
			view.removeClass(cfg.failClass);
			$(t).attr('yzStatus',1);
		} else {
			view.addClass(cfg.failClass);
			$(t).attr('yzStatus',0);
		}
		return test;
	}
	//失去焦点时验证并给出提示-函数
	this.each(function(i){
			this.check = function(){
				var v = $(this).val();
				
				var test;
				if(!cfg.isRequired) {
					test = v=='';
					if(yzStatus(test,this)) return true;
				}
				//如果是密码确认：
				if(cfg.isPW_QR) {
					var pw1_id = this.id;
					var pw2_id = pw1_id.substring(0,pw1_id.length-1);
					test = ($('#'+pw2_id).val() == $('#'+pw1_id).val());
				} else if(cfg.regular!=null){
					test = cfg.regular.test(v);
				} else if(cfg.test!=null && $.isFunction(cfg.test)) {
					test = cfg.test.apply(this);
				}
				return yzStatus(test,this);
		};
	});
	//失去焦点时事件
	if(cfg.isBlur) {
		this.live('blur',function(e){
			if(cfg.check!=null && $.isFunction(cfg.check)) {
				cfg.check.apply(this);
			} else {
				this.check();
			}
		});
	}

	if(cfg.info!='') {
		//在内存中创建提示层
		var tipDIV = $("<div class="+ cfg.infoClass +" saved=0 style='dispaly:none'></div>");
		//鼠标进入元素与离开元素事件
		this.live('mouseover',function(e){
			if(tipDIV.attr('saved')==0){
				$("body").append(tipDIV);
				tipDIV.attr('saved',1);
			}
			tipDIV.html(cfg.info);
			tipDIV.show(cfg.showSpeed);
		});
		this.live('mouseout',function(e){
			tipDIV.hide(cfg.hideSpeed);
		});
		//鼠标在元素上移动事件
		this.live('mousemove',function(event){
			var event = event || window.event;
			var iWidth = document.documentElement.offsetWidth - event.clientX;
			//设置tipDIV的top值
			var tip = tipDIV[0];
			tip.style.top = event.clientY + 5 + "px";
			//设置tipDIV的left值, 如果右侧显示区域不够, 大图将在鼠标左侧显示.
			tip.style.left = (iWidth < tip.offsetWidth + 10 ? event.clientX - tip.offsetWidth - 5 : event.clientX + 5) + "px";
		});
	}
	return this;
}
function yzForm(formID,isAlert) {
	if(typeof isAlert == 'undefined'){
		isAlert = true;
	}
	var f;
	if(typeof formID == 'object'){
		f = formID;
	} else if(typeof formID == 'string') {
		f = $('#'+formID);
	} else {
		alert("调用yzForm()时，formID参数传递错误");
	}
	f.yz();
	if(f.attr('yzSuccess') == 'false') {
		if(isAlert){
			alert('表单格式有错，请按提示填写！')
		}
		return false;
	}
	return true;
}